/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux;

// {{{ enum LineScaleMode
enum LineScaleMode
{
	/** オブジェクトがスケールされる場合には、線の太さもスケールされます。*/
	NORMAL;
	/** オブジェクトがスケースされても、線の太さに影響を与えません。*/
	NONE;
	/** オブジェクトが縦方向にのみスケールされる場合には、線の太さを変えません。*/
	VERTICAL;
	/** オブジェクトが横方向にのみスケールされる場合には、線の太さを変えません。*/
	HORIZONTAL;

}
// }}}
// {{{ enum LineCapsStyle
enum LineCapsStyle
{
	/** 線の終端として特別な描画はされません。*/
	NONE;
	/** 線の終端は線の幅分だけ飛び出ます。*/
	SQUARE;
	/** 線の終端は丸くなります。*/
	ROUND;
}
// }}}
// {{{ enum LineJointStyle
enum LineJointStyle
{
	/** 線の接合点は丸くなります。*/
	ROUND;
	/** 線の接合点は尖ります。*/
	MITER;
	/** 線の接合点は切り取られます。*/
	BEVEL;
}
// }}}
// {{{ class UXLineStyle
/** 
 * UXLineStyleクラス<br>
 * Graphicsクラスで利用する線の描画に関する詳細な情報を定義するクラスです。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class UXLineStyle
{
	// {{{ public var thickness : Float
	/**
	 * 線の太さをポイントで表した数字(0-255)。 デフォルト0。
	 */
	public var thickness (default, default): Float;
	// }}}
	// {{{ public var color (default, default) : UXColor
	/**
	 * 線の色。デフォルト黒。
	 */
	public var color (default, default) : UXColor;
	// }}}
	// {{{ public var pixelHinting (default, default) : Bool
	/**
	 * ピクセル全体に対して線をヒンティングするかどうかのフラグ。デフォルトfalse。
	 */
	public var pixelHinting (default, default) : Bool;
	// }}}
	// {{{ public var scaleMode (default, default) : LineScaleMode
	/**
	 * 拡大・縮小のモード。デフォルトNormal。
	 */
	public var scaleMode (default, default) : LineScaleMode;
	// }}}
	// {{{ public var caps (default, default) : LineCapsStyle
	/**
	 * 線の終端の形を指定できます。デフォルトでNoneです。
	 */
	public var caps (default, default) : LineCapsStyle;
	// }}}
	// {{{ public var joints (default, default) : LineJointStyle
	/**
	 * 線の接合点の形を指定できます。デフォルトでROUNDです。
	 */
	public var joints (default, default) : LineJointStyle;
	// }}}
	// {{{ public var miterLimit (default, default) : Float
	/**
	 * jointsがMITERに設定されている場合に、尖った部分の内側からの長さの限界値を指定できます。デフォルトで3です。
	 */
	public var miterLimit (default, default) : Float;
	// }}}
	// {{{ public function new( ?thickness : Float = 0, ?color : UXColor, ?pixelHiting : Bool = false, ?scaleMode : LineScaleMode = NORMAL, ?caps : LineCapsStyle = NONE, ?joints : LineJointStyle = ROUND, ?miterLimit : Float = 3)
	/**
	 * コンストラクタ。
	 */
	public function new( ?thickness : Float = 0, ?color : UXColor, 
						 ?pixelHinting : Bool = false, ?scaleMode : LineScaleMode, 
						 ?caps : LineCapsStyle, ?joints : LineJointStyle,
						 ?miterLimit : Float = 3)
	{
		if( color == null ) { color = new UXColor(); }
		if( scaleMode == null ) { scaleMode = LineScaleMode.NORMAL; }
		if( caps == null ) { caps = LineCapsStyle.NONE; }
		if( joints == null ) { joints = LineJointStyle.ROUND; }

		this.thickness = thickness;
		this.color = color;
		this.pixelHinting = pixelHinting;
		this.scaleMode = scaleMode;
		this.caps = caps;
		this.joints = joints;
		this.miterLimit = miterLimit;
	}
	// }}}
}
// }}}
